//引入模块
const express = require("express");
//引入上一级目录下的mysql的Query对象
const query = require("../util/query.js");
const {
	md5
} = require('../util/md5.js');
const JWT = require('../util/token.js');

//创建空路由器
let router = express.Router();
//==============================================
//系统用户模块 
//===============================================
//系统登录用户  POST /admin/login  返回携带token
router.post('/login', async (req, res) => {
	try {
		//获取数据
		let userLogin = req.body;
		//验证各项数据是否为空
		if (!userLogin.name) throw new Error("用户名不能为空");
		if (!userLogin.password) throw new Error("密码不能为空");

		//创建并执行SQL语句,查看是否有这样用户名的记录  FROM xz_admin
		let sql = `SELECT id,name,password,salt FROM xz_admin WHERE name ="${userLogin.name}"`;
		let result = await query(sql);
		//根据查询返回的结果集（result）长度是否大于0,判断是否有这个用户
		if (result.length > 0) { //有这个用户名的记录
			let user = result[0]; //获取记录中的用户id,name,password,salt
			//接下判断用户的密码是否正确，用户密码的形成参见用户注册代码
			if (user.password === md5(userLogin.password + user.salt)) {
				//密码正确,登陆成功后
				delete user.password; //删除不再需要的属性
				delete user.salt;
				//生成Token，并设置Token携带的信息
				let payload = {
					userId: user.id,
					userName: user.name,
				};
				//jwt--jsonwebtoken第三方库生成Token
				let token = JWT.sign(payload);
				return res.send({
					code: 1,
					msg: "登录成功",
					data: {
						user,
						token
					}
				});				
			}
		}
		throw new Error("用户名或密码错误");
	} catch (error) {
		res.send({
			code: -1,
			msg: error.message
		});
	}
});

//===============================================
//退出登录 GET /admin/logout  //其实只要在客户端设置Token为空即可
router.get("/logout", (req, res) => {
  //可以在这里对用户的使用日志进行记录
	res.send({
		code: 1,
		msg: "登出成功"
	});
});

//根据用户Token返回用户信息 POST /admin/info
router.get("/info", async (req, res) => {	
	//验证用户Token 请求头中携带Token  req.headers.authorization=
	let user = JWT.getUser(req, res);
	if (user == null) return;
	
	// 验证通过，继续
	try {
		//执行SQL语句   FROM xz_admin
		let sql = `SELECT id,name,email,phone,gender,avatar,nick_name FROM xz_admin WHERE id=${user.id}`;
		let result = await query(sql);

		//如果数据查询成功，响应对象
		if (result.length > 0) {
			res.send({
				code: 1,
				msg: "成功",
				data: result[0], //返回的是数组第一个元素，是对象
			});
			return;
		}
		throw new Error("没有这样的用户");
	} catch (error) {
		res.send({
			code: -1,
			msg: error.message
		});
	}
});

//导出路由器
module.exports = router;